OAuth 2.0 ์์ ๋ก๊ทธ์ธ ์ฐ๋ํ๊ธฐ: ๊ตฌ๊ธ, ์นด์นด์ค๋ก ์์ํ๋ ๊ฐํธ ์ธ์ฆ
๋ณต์กํ ํ์๊ฐ์ ์ ์ฐจ๋ ์ฌ์ฉ์ ์ดํ์ ์ฃผ๋ ์์ธ์ ๋๋ค. OAuth 2.0์ ์ด์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ๊ฐ์ ํ ๊ตฌ๊ธ, ์นด์นด์ค, ๋ค์ด๋ฒ ๊ณ์ ์ ํตํด ์์ ํ๊ณ ๋น ๋ฅด๊ฒ ์ฐ๋ฆฌ ์๋น์ค์ ๋ก๊ทธ์ธํ๊ฒ ํ ์ ์์ต๋๋ค.
1. OAuth 2.0์ ํต์ฌ ์ญํ ์
- Resource Owner: ์ผ๋ฐ ์ฌ์ฉ์ (๋).
- Client: ์ฐ๋ฆฌ ์๋น์ค (์ ํ๋ฆฌ์ผ์ด์ ).
- Resource Server: ๊ตฌ๊ธ, ์นด์นด์ค ๋ฑ ์ ๋ณด๋ฅผ ๊ฐ์ง ์๋ฒ.
- Authorization Server: ์ธ์ฆ์ ๋ด๋นํ๊ณ Access Token์ ๋ฐ๊ธํ๋ ์๋ฒ.
2. Spring Boot OAuth2 Client ์ค์
์คํ๋ง ๋ถํธ๋ spring-boot-starter-oauth2-client๋ฅผ ํตํด ๋งค์ฐ ์ฌ์ด ์ฐ๋์ ์ง์ํฉ๋๋ค.
โ ์์กด์ฑ ์ถ๊ฐ
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>โก ์ค์ (application.yml)
๊ตฌ๊ธ ๊ฐ๋ฐ์ ์ฝ์์์ ๋ฐ๊ธ๋ฐ์ ID์ Secret์ ์ ๋ ฅํฉ๋๋ค.
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR_CLIENT_ID
client-secret: YOUR_CLIENT_SECRET
scope:
- email
- profile3. ๊ตฌํ ๋ฐฉ์ (CustomOAuth2UserService)
๋ก๊ทธ์ธ ์ฑ๊ณต ํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ฐ๋ฆฌ DB์ ์ ์ฅํ๊ฑฐ๋ ์ถ๊ฐ ๋ก์ง์ ์คํํ๊ธฐ ์ํด ์๋น์ค๋ฅผ ์ปค์คํ ํฉ๋๋ค.
@Service
public class CustomOAuth2UserService implements OAuth2UserService<OAuth2UserRequest, OAuth2User> {
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) {
// 1. ๊ตฌ๊ธ/์นด์นด์ค๋ก๋ถํฐ ์ ์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
// 2. ์ฐ๋ฆฌ ์๋น์ค DB์ ์์ผ๋ฉด ์๋ ๊ฐ์
์ฒ๋ฆฌ
// 3. ๊ถํ ๋ถ์ฌ ํ ์ ์ ๊ฐ์ฒด ๋ฐํ
}
}4. ์ OAuth 2.0์ธ๊ฐ?
- ๋ณด์์ฑ: ์ฐ๋ฆฌ ์๋น์ค๊ฐ ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ์ ํ์๊ฐ ์์ต๋๋ค.
- ์ ๋ขฐ๋: ๋ํ ํ๋ซํผ์ ์ธ์ฆ์ ๋น๋ ค ์ฐ๋ฏ๋ก ์ฌ์ฉ์์๊ฒ ์ ๋ขฐ๋ฅผ ์ค๋๋ค.
- ๋ง์ผํ ํ์ฉ: ๋์ํ์ ์ด๋ฉ์ผ ๋ฑ์ ์ ๋ณด๋ฅผ ๋ฐ์ ๋ง์ผํ ์ ํ์ฉํ ์ ์์ต๋๋ค.
5. ๊ฒฐ๋ก
์์ ๋ก๊ทธ์ธ์ ์ด์ ์ ํ์ด ์๋ ํ์ ๊ธฐ๋ฅ์ ๋๋ค. Spring Security์ OAuth2 Client ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ๋ฉด ๋ณต์กํ ํ๋กํ ์ฝ ์ดํด ์์ด๋ ๊ฐ๋ ฅํ ์ธ์ฆ ์์คํ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.